package app.common.ar;

import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.Version;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.gitee.feizns.quickstart.ddl.annotation.Comment;
import com.gitee.feizns.quickstart.mybatis.plus.jpa.domain.pojo.AutoIdPojo;
import com.vladmihalcea.hibernate.type.json.JsonStringType;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;

/**
 * active record
 * 按需要调整需要的的字段、
 * 使用雪花id可以使用
 * @author feizns
 * @since 2023/06/04
 */
@Getter
@Setter
@ToString
@Accessors(chain = true)
@MappedSuperclass
@TypeDefs(@TypeDef(name = "json", typeClass = JsonStringType.class))
public abstract class Ar<T extends Ar<T>> extends AutoIdPojo<T> {

    /**
     * 数据版本（乐观锁字段）
     */
    @JsonIgnore
    @Comment("数据版本（乐观锁字段）")
    @Version
    @Column(columnDefinition = "INT UNSIGNED DEFAULT 0", nullable = false)
    protected Integer version;

    /**
     * 逻辑删除字段（该字段不做展示）
     */
    @JsonIgnore
    @Comment("逻辑删除字段（1=已删除、0=未删除）")
    @TableLogic(delval = "1")
    @Column(columnDefinition = "BIT DEFAULT 0", nullable = false)
    protected Boolean deleted;

//    /**
//     * 最后修改时间
//     */
//    @LastModifiedDate
//    @JsonProperty(index = Short.MAX_VALUE)
//    @TableField(fill = FieldFill.INSERT_UPDATE)
//    @Now
//    @Comment("最后一次更新时间")
//    protected LocalDateTime lastModifiedTime;
//
//    /**
//     * 创建时间
//     */
//    @JsonProperty(index = Integer.MAX_VALUE)
//    @CreatedDate
//    @TableField(fill = FieldFill.INSERT)
//    @Now
//    @Comment("创建时间")
//    protected LocalDateTime createTime;

}
